// 创建用户相关的仓库
import { defineStore } from "pinia";
// 引入接口
import { reqLogin, reqUserInfo, reqLogout } from "@/api/user";
import type { UserState } from "./types/type";
import { GET_TOKEN, SET_TOKEN, REMOVE_TOKEN } from "@/utils/token";
import type { loginFormData, loginResponseData, userInfoResponseData, responseData } from "@/api/user/type";
// 引入路由（常量路由）
import { constantRoute } from "@/router/routes";
// 创建用户仓库
const useUserStore = defineStore('User', {
    // 存储数据
    state: (): UserState => {
        return {
            token: GET_TOKEN(), //用户唯一标识：token
            menuRoutes: constantRoute, //仓库存储生成菜单需要数组（路由）
            username: '',
            avatar: ''
        }
    },
    // 异步|逻辑操作
    actions: {
        // 用户登录方法
        async userLogin(data: loginFormData) {
            // 登录请求
            const result: loginResponseData = await reqLogin(data)
            // 成功：200->token
            if (result.code == 200) {
                // pinia仓库存储token
                this.token = (result.data as string)
                // console.log(result.data.token);
                // 本地持久化存储一份
                SET_TOKEN(result.data as string)
                // 能保证当前async函数返回一个成功的Promise
                return 'ok'
            }
            // 失败：201->登录失败错误的信息
            else {
                // 返回失败的Promise
                return Promise.reject(new Error(result.data))
            }
        },
        // 获取用户信息
        async userInfo() {
            // 获取用户信息存储仓库当中
            const result: userInfoResponseData = await reqUserInfo()
            // 如果获取用户信息成功，存储用户信息
            if (result.code == 200) {
                this.username = result.data.name
                this.avatar = result.data.avatar
                return 'ok'
            } else {
                return Promise.reject(new Error(result.message))
            }
        },
        // 退出登录
        async userLogout() {
            // 退出登录请求
            const result: responseData = await reqLogout()
            if (result.code == 200) {
                this.token = ''
                this.username = ''
                this.avatar = ''
                REMOVE_TOKEN()
                return 'ok'
            }
            else {
                return Promise.reject(new Error(result.message))
            }
        }
    },
    // 获取数据
    getters: {

    }
})

export default useUserStore